diff --git a/uefi/linaro-edk2/StdLib/BsdSocketLib/SocketInternals.h b/uefi/linaro-edk2/StdLib/BsdSocketLib/SocketInternals.h
new file mode 100644
index 0000000..c30f7fb
--- /dev/null
+++ b/uefi/linaro-edk2/StdLib/BsdSocketLib/SocketInternals.h
@@ -0,0 +1,205 @@
+/** @file
+  Definitions for the socket library.
+
+  Copyright (c) 2011, Intel Corporation
+  All rights reserved. This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD License
+  which accompanies this distribution.  The full text of the license may be found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef _SOCKET_INTERNALS_H_
+#define _SOCKET_INTERNALS_H_
+
+#include <Uefi.h>
+
+//----------------------------------------------------------------------
+//
+//  The following private files are required to support file descriptors
+//
+
+#include <kfile.h>
+#include <MainData.h>
+
+#include <Efi/SysEfi.h>
+
+//
+//  End of private files
+//
+//----------------------------------------------------------------------
+
+#include <Library/DebugLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiLib.h>
+
+#include <Protocol/EfiSocket.h>
+#include <Protocol/ServiceBinding.h>
+
+#include <sys/errno.h>
+#include <sys/poll.h>
+#include <sys/EfiSysCall.h>
+#include <sys/socket.h>
+
+//------------------------------------------------------------------------------
+//  Support Routines
+//------------------------------------------------------------------------------
+
+/**
+  Translate from the socket file descriptor to the socket protocol.
+
+  @param [in] s             Socket file descriptor returned from ::socket.
+
+  @param [in] ppDescriptor  Address to receive the descriptor structure
+                            address for the file
+  @param [in] pErrno        Address of the errno variable
+
+  @return   A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if
+            an invalid file descriptor was passed in.
+
+ **/
+EFI_SOCKET_PROTOCOL *
+BslFdToSocketProtocol (
+  int s,
+  struct __filedes ** ppDescriptor,
+  int * pErrno
+  );
+
+/**
+  Close the socket
+
+  The BslSocketClose routine is called indirectly from the close file
+  system routine.  This routine closes the socket and returns the
+  status to the caller.
+
+  @param[in] pDescriptor Descriptor address for the file
+
+  @return   This routine returns 0 upon success and -1 upon failure.
+            In the case of failure, ::errno contains more information.
+
+**/
+int
+EFIAPI
+BslSocketClose (
+  struct __filedes * pDescriptor
+  );
+
+/**
+  Worker routine to close the socket.
+
+  @param[in] pSocketProtocol   Socket protocol structure address
+
+  @param[in] pErrno            Address of the ::errno variable
+
+  @retval EFI_SUCCESS   Successfully closed the socket
+
+**/
+EFI_STATUS
+BslSocketCloseWork (
+  IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
+  IN int * pErrno
+  );
+
+/**
+  Poll the socket for activity
+
+  @param [in] pDescriptor Descriptor address for the file
+
+  @param [in] Events      Mask of events to detect
+
+  @return     Detected events for the socket
+
+ **/
+short
+EFIAPI
+BslSocketPoll (
+  IN struct __filedes * pDescriptor,
+  IN short Events
+  );
+
+/**
+  Build a file descriptor for a socket.
+
+  @param [in] pSocketProtocol   Socket protocol structure address
+
+  @param [in] pErrno            Address of the errno variable
+
+  @return  The file descriptor for the socket or -1 if an error occurs.
+
+ **/
+int
+BslSocketProtocolToFd (
+  IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
+  IN int * pErrno
+  );
+
+/**
+  Read support routine for sockets
+
+  The BslSocketRead routine is called indirectly by the read file
+  system routine.  This routine is typically used for SOCK_STREAM
+  because it waits for receive data from the target system specified
+  in the ::connect call.
+
+  @param [in] pDescriptor   Descriptor address for the file
+  @param [in] pOffset       File offset
+  @param [in] LengthInBytes Number of bytes to read
+  @param [in] pBuffer       Address of the buffer to receive the data
+
+  @return   The number of bytes read or -1 if an error occurs.
+            In the case of an error, ::errno contains more details.
+
+**/
+ssize_t
+EFIAPI
+BslSocketRead (
+  struct __filedes *pDescriptor,
+  off_t * pOffset,
+  size_t LengthInBytes,
+  void * pBuffer
+  );
+
+/**
+  Write support routine for sockets
+
+  @param [in] pDescriptor   Descriptor address for the file
+  @param [in] pOffset       File offset
+  @param [in] LengthInBytes Number of bytes to write
+  @param [in] pBuffer       Address of the data
+
+  @return   The number of bytes written or -1 if an error occurs.
+            In the case of an error, ::errno contains more details.
+
+**/
+ssize_t
+EFIAPI
+BslSocketWrite (
+  struct __filedes *pDescriptor,
+  off_t * pOffset,
+  size_t LengthInBytes,
+  const void * pBuffer
+  );
+
+/**
+  Validate the socket's file descriptor
+
+  @param [in] pDescriptor Descriptor for the file
+
+  @param [in] pErrno      Address of the errno variable
+
+  @return   A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if
+            an invalid file descriptor was passed in.
+
+ **/
+EFI_SOCKET_PROTOCOL *
+BslValidateSocketFd (
+  struct __filedes * pDescriptor,
+  int * pErrno
+  );
+
+//------------------------------------------------------------------------------
+
+#endif  //  _SOCKET_INTERNALS_H_
